import Vue from 'vue'
import Vuex from 'vuex'
import 'Util/lib/sockjs'
import 'Util/lib/stomp'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    user: {
      name: window.localStorage.getItem('user' || '[]') == null ? '未登录' : JSON.parse(window.localStorage.getItem('user' || '[]')).name,
      userface: window.localStorage.getItem('user' || '[]') == null ? '' : JSON.parse(window.localStorage.getItem('user' || '[]')).userface,
      username: window.localStorage.getItem('user' || '[]') == null ? '' : JSON.parse(window.localStorage.getItem('user' || '[]')).username,
      roles: window.localStorage.getItem('user' || '[]') == null ? '' : JSON.parse(window.localStorage.getItem('user' || '[]')).roles
    },
    routes: [],
    msgList: [],
    isDotMap: new Map(),
    currentFriend: {},
    stomp: null,
    nfDot: false
  },
  mutations: {
    initMenu(state, menus){
      state.routes = menus;
    },
    login(state, user){
      state.user = user;
      window.localStorage.setItem('user', JSON.stringify(user));
    },
    logout(state){
      window.localStorage.removeItem('user');
      state.routes = [];
    },
    toggleNFDot(state, newValue){
      state.nfDot = newValue;
    },
    updateMsgList(state, newMsgList){
      state.msgList = newMsgList;
    },
    updateCurrentFriend(state, newFriend){
      state.currentFriend = newFriend;
    },
    addValue2DotMap(state, key){
      state.isDotMap.set(key, "您有未读消息")
    },
    removeValueDotMap(state, key){
      state.isDotMap.delete(key);
    }
  },
  actions: {
    connect(context){
      // context.state.stomp = Stomp.over(new SockJS("/ws/endpointChat"));
      // context.state.stomp.connect({}, frame=> {
      //   context.state.stomp.subscribe("/user/queue/chat", message=> {
      //     var msg = JSON.parse(message.body);
      //     var oldMsg = window.localStorage.getItem(context.state.user.username + "#" + msg.from);
      //     if (oldMsg == null) {
      //       oldMsg = [];
      //       oldMsg.push(msg);
      //       window.localStorage.setItem(context.state.user.username + "#" + msg.from, JSON.stringify(oldMsg))
      //     } else {
      //       var oldMsgJson = JSON.parse(oldMsg);
      //       oldMsgJson.push(msg);
      //       window.localStorage.setItem(context.state.user.username + "#" + msg.from, JSON.stringify(oldMsgJson))
      //     }
      //     if (msg.from != context.state.currentFriend.username) {
      //       context.commit("addValue2DotMap", "isDot#" + context.state.user.username + "#" + msg.from);
      //     }
      //     //更新msgList
      //     var oldMsg2 = window.localStorage.getItem(context.state.user.username + "#" + context.state.currentFriend.username);
      //     if (oldMsg2 == null) {
      //       context.commit('updateMsgList', []);
      //     } else {
      //       context.commit('updateMsgList', JSON.parse(oldMsg2));
      //     }
      //   });
      //   context.state.stomp.subscribe("/topic/nf", message=> {
      //     context.commit('toggleNFDot', true);
      //   });
      // }, failedMsg=> {

      // });
    }
  }
});
export default store
